package com.warren.beans.factory;

import com.warren.error.BeansException;

import java.beans.Beans;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author warren
 * @create 2021-08-17 20:35
 * @Description 一个最简单的容器，它主要的功能是为依赖注入 （DI） 提供支持
 *  FactoryBean也是接口，为IOC容器中Bean的实现提供了更加灵活的方式，
 *  FactoryBean在IOC容器的基础上给Bean的实现加上了一个简单工厂模式和装饰模式
 *  我们可以在getObject()方法中灵活配置。其实在Spring源码中有很多FactoryBean的实现类.
 *
 * 区别：BeanFactory是个Factory，也就是IOC容器或对象工厂，
 * FactoryBean是个Bean。在Spring中，所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。
 * 但对FactoryBean而言，这个Bean不是简单的Bean，而是一个能生产或者修饰对象生成的工厂Bean,
 * 它的实现与设计模式中的工厂模式和修饰器模式类似
 */
public interface BeanFactory {

   Object getBean(String name)throws BeansException;

   //解决构造参数问题
   Object getBean(String name, Object... args) throws BeansException;

   <T> T getBean(String name, Class<T> requiredType) throws BeansException;

   <T> T getBean(Class<T> requiredType) throws BeansException;
}
